package com.hake.core.support.service;

import java.util.List;

import com.github.pagehelper.PageInfo;
import com.hake.core.exception.AppException;

/**
 * 通用Service接口
 */
public interface IService<T> {

	/**
	 * 插入所有字段数据
	 * @param entity
	 * @return
	 * @throws AppException
	 */
	int insert(T entity) throws AppException;
	
	/**
	 * 仅插入不为空字段数据
	 * @param entity
	 * @return
	 * @throws AppException
	 */
	int insertSelective(T entity) throws AppException;
	
	/**
	 * 根据主键删除
	 * @param id
	 * @return
	 * @throws AppException
	 */
	int deleteByPrimaryKey(Object id) throws AppException;

	/**
	 * 仅修改不为空字段数据
	 * @param entity
	 * @return
	 * @throws AppException
	 */
    int updateByPrimaryKeySelective(T entity) throws AppException;

    /**
     * 修改所有字段数据
     * @param entity
     * @return
     * @throws AppException
     */
    int updateByPrimaryKey(T entity) throws AppException;

    /**
     * 根据主键查询对象
     * @param id
     * @return
     * @throws AppException
     */
    T selectByPrimaryKey(Object id) throws AppException;
    
    /**
     * 查询所有对象
     * @return
     * @throws AppException
     */
    List<T> selectAll() throws AppException ;
    
    /**
   	 * 检查字段的值是否已存在
   	 * @param id ID可以为NULL，主要用于update操作
   	 * @param field coulum名
   	 * @param fieldVal column值
   	 * @return
   	 */
   	int existsFileldValue(Object id, String field, String fieldVal) throws AppException ;
   	
    /**
     * 批量删除
     * @param ids 主键
     * @return
     */
    int deleteBatchByKeys(Object[] ids) throws AppException ;
    
    /**
     * 分页查询
     * selectByPage是mapper.xml中的<select id="selectByPage">
     * @param entity
     * @return 集合对象
     */
    List<T> selectByPageList(T entity) throws AppException ;
    
    /**
     * 分页查询
     * @param entity
     * @return 分页对象
     * @throws AppException
     */
    PageInfo<T> selectByPageInfo(T entity) throws AppException ;
    
}
